﻿package fr.babos.core.utils 
{
	import flash.system.Capabilities;
	
	/**
	 * Classe utilitaire permettant de récupérer des informations sur l'environnement d'exécution.
	 * @author ZoulouX, Pascal
	 */
	public class EnvUtils
	{
		public static const WIN_PLATFORM		:String				= "WIN";
		public static const MAC_PLATFORM		:String				= "MAC";
		
		/**
		 * La version
		 */
		protected static var __version			:Number;
		
		/**
		 * La build
		 */
		protected static var __build			:String;
		
		/**
		 * La plateforme
		 */
		protected static var __platform			:String;
		
		
		/**
		 * Récupérer la version du player
		 */
		public static function get version ():Number
		{
			// Si la version n'est pas définie
			if (__version == 0)
			{
				// Récupérer les infos du player
				getPlayerInfo();
			}
			
			// Retourner la version
			return __version;
		}
		
		/**
		 * Récupérer la build du player
		 */
		public static function get build ():String
		{
			// Si la build n'est pas définie
			if (__build == null)
				// Récupérer les infos du player
				getPlayerInfo();
			
			// Retourner la build
			return __build;
		}
		
		/**
		 * Récupérer la plateforme sur laquelle est éxécuté le player
		 */
		public static function get platform ():String
		{
			// Si la plateforme n'est pas définie
			if (__platform == null)
				// Récupérer les infos du player
				getPlayerInfo();
			
			// Retourner la plateforme
			return __platform;
		}
		
		/**
		 * Récupérer la version et la plateforme
		 */
		private static function getPlayerInfo ():void
		{
			// Récupérer la plateforme et la version
			var v:String = Capabilities.version;
			
			// Séparer la plateforme de la version
			var pAndV:Array = v.split(" ");
			
			// Enregistrer la plateforme
			__platform = pAndV[0];
			
			// Enregistrer la build
			__build = pAndV[1];
			
			// Convertir la version en Number et l'enregistrer
			__version = parseFloat(pAndV[1].split(",", 2).join("."));
		}
		
		/**
		 * Savoir si le player possède un debugger
		 */
		public static function isPlayerDebug ():Boolean
		{
			return Capabilities.isDebugger;
		}
		
		/**
		 * Savoir si le player est en standAlone.
		 */
		public static function isStandalone ():Boolean
		{
			return (Capabilities.playerType == "StandAlone");
		}
		
		/**
		 * On teste si on est dans l'IDE de Flash.
		 * @return True si on est dans L'IDE sinon false.
		 */
		public static function isInIDE():Boolean
		{
			return Capabilities.playerType == "External";
		}
		
		/**
		 * On test si on est dans un browser ou pas.
		 * @return	True si on est dans un browser, si non, false.
		 */
		public static function isInBrowser():Boolean
		{
			return Capabilities.playerType == "PlugIn" || Capabilities.playerType == "ActiveX";
		}
	}
}